home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / flyingscalyball.s < prev    next >
Text File  |  1997-01-31  |  16KB  |  1,019 lines

  1. ItsAFlyingNasty:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  
  11.  clr.b exitfirst
  12.  
  13.  move.b worry(a0),d0
  14.  move.b d0,d1
  15.  and.w #128,d1
  16.  and.b #127,d0
  17.  sub.b #1,d0
  18.  bge.s .oknn
  19.  move.b #0,d0
  20. .oknn: 
  21.  
  22.  add.b d0,d1
  23.  move.b d1,worry(a0)
  24.  
  25.  move.w (a0),CollId
  26.  move.w #160,extlen
  27.  move.b #2,awayfromwall
  28.  
  29.  move.l #0,StepUpVal
  30.  move.l #$1000000,StepDownVal
  31.  move.l #96*128,thingheight
  32.  move.w #8,screamsound
  33.  move.w #64,nasheight
  34.  
  35.  move.w #$6060,6(a0)
  36.  
  37.  clr.b gotgun
  38.  move.w 12(a0),d2
  39.  bge.s .stillalive
  40. .notthisone:
  41.  rts
  42. .stillalive:
  43.  
  44.  tst.b numlives(a0)
  45.  bgt .notdying
  46.  move.b #0,numlives(a0)
  47.  move.l ZoneAdds,a1
  48.  move.l (a1,d2.w*4),a1
  49.  add.l LEVELDATA,a1
  50.  move.l ToZoneFloor(a1),d0
  51.  tst.b ObjInTop(a0)
  52.  beq.s .notintopp
  53.  move.l ToUpperFloor(a1),d0
  54. .notintopp:
  55.  asr.l #7,d0
  56.  sub.w nasheight,d0
  57.  cmp.w 4(a0),d0
  58.  ble.s .putitin
  59.  move.w TempFrames,d0
  60.  asl.w #4,d0
  61.  add.w d0,4(a0)
  62.  add.w d0,FourthTimer(a0)
  63.  bra .nosplatch
  64.  
  65. .putitin:
  66.  move.w d0,4(a0)
  67.  
  68.  cmp.w #20,10(a0)
  69.  bne.s .notyet
  70.  move.w #80,d0
  71.  jsr FindCloseRoom
  72.  rts
  73. .notyet:
  74.  
  75.  move.w FourthTimer(a0),d0
  76.  asr.w #4,d0
  77.  add.w #1,d0
  78.  move.w d0,d2
  79.  
  80.  move.w (a0),d0
  81.  move.l ObjectPoints,a1
  82.  move.w (a1,d0.w*8),newx
  83.  move.w 4(a1,d0.w*8),newz
  84.  
  85.  movem.l d0-d7/a0-a6,-(a7)
  86.  move.w #0,d0
  87.  move.w #31,d3
  88.  jsr ExplodeIntoBits
  89.  movem.l (a7)+,d0-d7/a0-a6
  90.  move.w #20,10(a0)
  91.  move.w #80,d0
  92.  jsr FindCloseRoom
  93.  
  94.  rts
  95. .nosplatch
  96.  
  97.  move.w TempFrames,d0
  98.  sub.w d0,ThirdTimer(a0)
  99.  bge.s .onfloordead
  100.  move.w #20,ThirdTimer(a0)
  101.  
  102.  move.w 10(a0),d0
  103.  cmp.w #19,d0
  104.  bge .onfloordead
  105.  add.w #1,10(a0)
  106.  move.w #80,d0
  107.  jsr FindCloseRoom
  108.  
  109.  rts
  110.  
  111. .onfloordead:
  112.  move.w #80,d0
  113.  jsr FindCloseRoom
  114.  
  115.  rts
  116.  
  117. .notdying: 
  118.  
  119.  tst.b 17(a0)
  120.  beq.s .cantseeplayer
  121.  tst.w ThirdTimer(a0)
  122.  ble FlyingBallAttack
  123.  move.w TempFrames,d0
  124.  sub.w d0,ThirdTimer(a0)
  125.  bra .waitandsee
  126.  
  127. .cantseeplayer:
  128.  
  129.  jsr GetRand
  130.  lsr.w #4,d0
  131.  and.w #31,d0
  132.  add.w #10,d0
  133.  move.w d0,ThirdTimer(a0)
  134.  
  135. .waitandsee:
  136.  
  137.  move.w #30,FourthTimer(a0)
  138.  
  139.  move.w 12(a0),d2
  140.  move.l ZoneAdds,a5
  141.  move.l (a5,d2.w*4),d0
  142.  add.l LEVELDATA,d0
  143.  move.l d0,objroom
  144.  
  145.  jsr ViewpointToDraw
  146.  
  147.  asl.l #2,d0
  148.  add.l alframe,d0
  149.  add.l #$40000,d0
  150.  move.l d0,8(a0)
  151.  
  152.  move.w TurnSpeed(a0),d0
  153.  add.w Facing(a0),d0
  154.  and.w #8190,d0
  155.  move.w d0,Facing(a0)
  156.  
  157.  move.w 4(a0),d0
  158.  ext.l d0
  159.  asl.l #7,d0
  160.  sub.l #48*128,d0
  161.  move.l d0,newy
  162.  move.l d0,oldy
  163.  
  164.  move.w 12(a0),FromZone
  165.  bsr CheckTeleport
  166.  tst.b OKTEL
  167.  beq.s .notel
  168.  move.l floortemp,d0
  169.  asr.l #7,d0
  170.  add.w d0,4(a0)
  171.  bra .nochangedir
  172. .notel:
  173.  
  174.  
  175.  move.w maxspd(a0),d2
  176.  muls TempFrames,d2
  177.  move.w d2,speed
  178.  move.w Facing(a0),d0
  179.  move.b ObjInTop(a0),StoodInTop
  180.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  181.  jsr GoInDirection
  182.  move.w #%1000000000,wallflags
  183.  
  184.  move.l #%11111111110111100001,CollideFlags
  185.  jsr Collision
  186.  tst.b hitwall
  187.  beq.s .okcanmove
  188.  
  189.  move.w oldx,newx
  190.  move.w oldz,newz
  191.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  192.  bra.s .hitathing
  193.  
  194. .okcanmove:
  195.  
  196.  clr.b wallbounce
  197.  jsr MoveObject
  198.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  199.  move.b StoodInTop,ObjInTop(a0)
  200.  
  201. .hitathing:
  202.  
  203. ; tst.b hitwall
  204. ; beq.s .nochangedir
  205. ; move.w #-1,ObjTimer(a0)
  206. .nochangedir
  207.  
  208.  move.l objroom,a2
  209.  move.w (a2),12(a0)
  210.  move.w newx,(a1)
  211.  move.w newz,4(a1)
  212.  
  213.  move.w (a2),d0
  214.  move.l #ZoneBrightTable,a5
  215.  move.l (a5,d0.w*4),d0
  216.  tst.b ObjInTop(a0)
  217.  bne.s .okbit
  218.  swap d0
  219. .okbit:
  220.  move.w d0,2(a0)
  221.  
  222.  move.l ToZoneFloor(a2),d0
  223.  move.l ToZoneRoof(a2),d1
  224.  tst.b ObjInTop(a0)
  225.  beq.s .notintop
  226.  move.l ToUpperFloor(a2),d0
  227.  move.l ToUpperRoof(a2),d1
  228. .notintop:
  229.  
  230.  move.w objyvel(a0),d2
  231.  add.w d2,4(a0)
  232.  
  233.  move.w 4(a0),d2
  234.  ext.l d2
  235.  asl.l #7,d2
  236.  move.l d2,d3
  237.  add.l #48*256,d2
  238.  sub.l #48*256,d3
  239.  
  240.  cmp.l d0,d2
  241.  blt.s .botnohit
  242.  move.l d0,d2
  243.  move.l d2,d3
  244.  neg.w objyvel(a0)
  245.  sub.l #96*256,d3
  246. .botnohit:
  247.  
  248.  cmp.l d1,d3
  249.  bgt.s .topnohit
  250.  move.l d1,d3
  251.  neg.w objyvel(a0)
  252. .topnohit:
  253.  
  254.  add.l #48*256,d3
  255.  asr.l #7,d3
  256.  move.w d3,4(a0)
  257.  
  258.  move.b damagetaken(a0),d2
  259.  beq .noscream
  260.  
  261.  sub.b d2,numlives(a0)
  262.  bgt .notdeadyet
  263.  
  264.  cmp.b #40,d2
  265.  ble.s .noexplode
  266.  
  267.  movem.l d0-d7/a0-a6,-(a7)
  268.  sub.l ObjectPoints,a1
  269.  add.l #ObjRotated,a1
  270.  move.l (a1),Noisex
  271.  move.w #400,Noisevol
  272.  move.w #14,Samplenum
  273.  move.b #1,chanpick
  274.  clr.b notifplaying
  275.  st backbeat
  276.  move.b 1(a0),IDNUM
  277.  jsr MakeSomeNoise
  278.  movem.l (a7)+,d0-d7/a0-a6
  279.  
  280.  movem.l d0-d7/a0-a6,-(a7)
  281.  move.w #0,d0
  282.  move.w #9,d2
  283.  move.w #31,d3
  284.  jsr ExplodeIntoBits
  285.  movem.l (a7)+,d0-d7/a0-a6
  286.  move.w #-1,12(a0)
  287.  rts
  288.  
  289. .noexplode:
  290.  
  291.  movem.l d0-d7/a0-a6,-(a7)
  292.  sub.l ObjectPoints,a1
  293.  add.l #ObjRotated,a1
  294.  move.l (a1),Noisex
  295.  move.w #200,Noisevol
  296.  move.w screamsound,Samplenum
  297.  move.b #1,chanpick
  298.  clr.b notifplaying
  299.  st backbeat
  300.  move.b 1(a0),IDNUM
  301.  jsr MakeSomeNoise
  302.  movem.l (a7)+,d0-d7/a0-a6
  303.  move.w #18,10(a0)
  304.  move.w #30,ThirdTimer(a0)
  305.  move.w #0,FourthTimer(a0)
  306.  move.w #80,d0
  307.  jsr FindCloseRoom
  308.  rts
  309.  
  310. .notdeadyet:
  311.  clr.b damagetaken(a0)
  312.  movem.l d0-d7/a0-a6,-(a7)
  313.  sub.l ObjectPoints,a1
  314.  add.l #ObjRotated,a1
  315.  move.l (a1),Noisex
  316.  move.w #200,Noisevol
  317.  move.w screamsound,Samplenum
  318.  move.b #1,chanpick
  319.  clr.b notifplaying
  320.  move.b 1(a0),IDNUM
  321.  st backbeat
  322.  jsr MakeSomeNoise
  323.  movem.l (a7)+,d0-d7/a0-a6
  324.  
  325. .noscream
  326.  
  327.  
  328.  move.w TempFrames,d0
  329.  sub.w d0,ObjTimer(a0)
  330.  bge.s .keepsamedir
  331.  
  332.  jsr GetRand
  333.  lsr.w #4,d0
  334.  and.w #255,d0
  335.  sub.w #128,d0
  336.  add.w d0,d0
  337.  move.w d0,TurnSpeed(a0)
  338.  move.w #50,ObjTimer(a0)
  339.  
  340.  jsr GetRand
  341.  lsr.w #4,d0
  342.  and.w #7,d0
  343.  sub.w #3,d0
  344.  move.w d0,d1
  345.  jsr GetRand
  346.  lsr.w #5,d0
  347.  and.w #1,d0
  348.  sub.w d0,d1
  349.  move.w d1,objyvel(a0)
  350.  
  351. .keepsamedir:
  352.  
  353.  move.w TempFrames,d0
  354.  sub.w d0,SecTimer(a0)
  355.  bge.s .nohiss
  356.  
  357.  movem.l d0-d7/a0-a6,-(a7)
  358.  sub.l ObjectPoints,a1
  359.  add.l #ObjRotated,a1
  360.  move.l (a1),Noisex
  361.  move.w #100,Noisevol
  362.  move.w #16,Samplenum
  363.  move.b #1,chanpick
  364.  clr.b notifplaying
  365.  move.b 1(a0),IDNUM
  366.  st backbeat
  367.  jsr MakeSomeNoise
  368.  movem.l (a7)+,d0-d7/a0-a6
  369.  
  370.  Jsr GetRand
  371.  lsr.w #6,d0
  372.  and.w #255,d0
  373.  add.w #300,d0
  374.  move.w d0,SecTimer(a0)
  375.  
  376. .nohiss:
  377.  
  378.  move.b ObjInTop(a0),ViewerTop
  379.  move.b PLR1_StoodInTop,TargetTop
  380.  move.l PLR1_Roompt,ToRoom
  381.  move.l objroom,FromRoom
  382.  move.w newx,Viewerx
  383.  move.w newz,Viewerz
  384.  move.w PLR1_xoff,Targetx
  385.  move.w PLR1_zoff,Targetz
  386.  move.l PLR1_yoff,d0
  387.  asr.l #7,d0
  388.  move.w d0,Targety
  389.  move.w 4(a0),Viewery
  390.  jsr CanItBeSeen
  391.  
  392.  clr.b 17(a0)
  393.  tst.b CanSee
  394.  beq .carryonprowling
  395.  
  396.  move.b #1,17(a0)
  397.  
  398. .carryonprowling:
  399.  
  400.  cmp.b #'n',mors
  401.  beq.s .carryonprowling2
  402.  
  403.  move.b ObjInTop(a0),ViewerTop
  404.  move.b PLR2_StoodInTop,TargetTop
  405.  move.l PLR2_Roompt,ToRoom
  406.  move.l objroom,FromRoom
  407.  move.w newx,Viewerx
  408.  move.w newz,Viewerz
  409.  move.w PLR2_xoff,Targetx
  410.  move.w PLR2_zoff,Targetz
  411.  move.l PLR2_yoff,d0
  412.  asr.l #7,d0
  413.  move.w d0,Targety
  414.  move.w 4(a0),Viewery
  415.  jsr CanItBeSeen
  416.  
  417.  tst.b CanSee
  418.  beq .carryonprowling2
  419.  
  420.  or.b #2,17(a0)
  421.  
  422. .carryonprowling2:
  423.  
  424.  move.w #80,d0
  425.  jsr FindCloseRoom
  426.  
  427.  rts
  428.  
  429. FlyingBallAttack:
  430.  
  431.  btst #0,17(a0)
  432.  beq FlyingBallAttackPLR2
  433.  btst #1,17(a0)
  434.  beq FlyingBallAttackPLR1
  435.  
  436.  move.l ObjectPoints,a1
  437.  move.w (a0),d0
  438.  move.w (a1,d0.w*8),d1
  439.  move.w 4(a1,d0.w*8),d2
  440.  
  441.  move.w PLR1_xoff,d3
  442.  move.w PLR1_zoff,d4
  443.  
  444.  sub.w d1,d3
  445.  sub.w d2,d4
  446.  
  447.  muls d3,d3
  448.  muls d4,d4
  449.  add.l d4,d3
  450.  move.w PLR2_xoff,d4
  451.  move.w PLR2_zoff,d5
  452.  sub.w d1,d4
  453.  sub.w d2,d5
  454.  
  455.  muls d4,d4
  456.  muls d5,d5
  457.  add.l d5,d4
  458.  cmp.l d3,d4
  459.  bgt FlyingBallAttackPLR1
  460.  
  461. FlyingBallAttackPLR2:
  462.  
  463.  move.w TempFrames,d0
  464.  sub.w d0,FourthTimer(a0)
  465.  bgt.s .oktoshoot
  466.  move.w #50,ThirdTimer(a0)
  467. .oktoshoot:
  468.  
  469.  move.w 12(a0),d2
  470.  move.l ZoneAdds,a5
  471.  move.l (a5,d2.w*4),d0
  472.  add.l LEVELDATA,d0
  473.  move.l d0,objroom
  474.  
  475.  jsr ViewpointToDraw
  476.  
  477.  asl.l #2,d0
  478.  bne.s .nofacing
  479.  move.l #16,d0
  480.  bra .facing
  481. .nofacing:
  482.  
  483.  add.l alframe,d0
  484. .facing
  485.  add.l #$40000,d0
  486.  move.l d0,8(a0)
  487.  
  488.  move.w PLR2_xoff,newx
  489.  move.w PLR2_zoff,newz
  490.  move.w (a0),d1
  491.  move.l #ObjRotated,a6
  492.  move.l ObjectPoints,a1
  493.  lea (a1,d1.w*8),a1
  494.  lea (a6,d1.w*8),a6
  495.  move.w (a1),oldx
  496.  move.w 4(a1),oldz
  497.  move.w maxspd(a0),d2
  498.  muls.w TempFrames,d2
  499.  move.w d2,speed
  500.  move.w #120,Range
  501.  move.w 4(a0),d0
  502.  ext.l d0
  503.  asl.l #7,d0
  504.  sub.l #48*256,d0
  505.  move.l d0,newy
  506.  move.l d0,oldy
  507.  
  508.  move.b ObjInTop(a0),StoodInTop
  509.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  510.  clr.b canshove
  511.  clr.b GotThere
  512.  jsr HeadTowardsAng
  513.  move.w #%1000000000,wallflags
  514.  
  515.  
  516.  clr.b wallbounce
  517.  Jsr MoveObject
  518.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  519.  move.b StoodInTop,ObjInTop(a0)
  520.  
  521.  move.w AngRet,Facing(a0)
  522.  
  523.  move.l objroom,a2
  524.  move.w (a2),12(a0)
  525.  move.w oldx,(a1)
  526.  move.w oldz,4(a1)
  527.  
  528.  move.w (a2),d0
  529.  move.l #ZoneBrightTable,a5
  530.  move.l (a5,d0.w*4),d0
  531.  tst.b ObjInTop(a0)
  532.  bne.s .okbit
  533.  swap d0
  534. .okbit:
  535.  move.w d0,2(a0)
  536.  
  537.  move.l ToZoneFloor(a2),d0
  538.  move.l ToZoneRoof(a2),d1
  539.  tst.b ObjInTop(a0)
  540.  beq.s .notintop
  541.  move.l ToUpperFloor(a2),d0
  542.  move.l ToUpperRoof(a2),d1
  543. .notintop:
  544.  
  545.  move.w objyvel(a0),d2
  546.  add.w d2,4(a0)
  547.  
  548.  move.w 4(a0),d2
  549.  ext.l d2
  550.  asl.l #7,d2
  551.  move.l d2,d3
  552.  add.l #48*256,d2
  553.  sub.l #48*256,d3
  554.  
  555.  cmp.l d0,d2
  556.  blt.s .botnohit
  557.  move.l d0,d2
  558.  move.l d2,d3
  559.  neg.w objyvel(a0)
  560.  sub.l #96*256,d3
  561. .botnohit:
  562.  
  563.  cmp.l d1,d3
  564.  bgt.s .topnohit
  565.  move.l d1,d3
  566.  neg.w objyvel(a0)
  567. .topnohit:
  568.  
  569.  add.l #48*256,d3
  570.  asr.l #7,d3
  571.  move.w d3,4(a0)
  572.  
  573.  move.b damagetaken(a0),d2
  574.  beq .noscream
  575.  
  576.  sub.b d2,numlives(a0)
  577.  bgt .notdeadyet
  578.  
  579.  cmp.b #40,d2
  580.  ble.s .noexplode
  581.  
  582.  movem.l d0-d7/a0-a6,-(a7)
  583.  sub.l ObjectPoints,a1
  584.  add.l #ObjRotated,a1
  585.  move.l (a1),Noisex
  586.  move.w #400,Noisevol
  587.  move.w #14,Samplenum
  588.  move.b #1,chanpick
  589.  clr.b notifplaying
  590.  st backbeat
  591.  move.b 1(a0),IDNUM
  592.  jsr MakeSomeNoise
  593.  movem.l (a7)+,d0-d7/a0-a6
  594.  
  595.  movem.l d0-d7/a0-a6,-(a7)
  596.  move.w #0,d0
  597.  move.w #9,d2
  598.  move.w #31,d3
  599.  jsr ExplodeIntoBits
  600.  movem.l (a7)+,d0-d7/a0-a6
  601.  move.w #-1,12(a0)
  602.  rts
  603.  
  604. .noexplode:
  605.  
  606.  movem.l d0-d7/a0-a6,-(a7)
  607.  sub.l ObjectPoints,a1
  608.  add.l #ObjRotated,a1
  609.  move.l (a1),Noisex
  610.  move.w #200,Noisevol
  611.  move.w screamsound,Samplenum
  612.  move.b #1,chanpick
  613.  clr.b notifplaying
  614.  st backbeat
  615.  move.b 1(a0),IDNUM
  616.  jsr MakeSomeNoise
  617.  movem.l (a7)+,d0-d7/a0-a6
  618.  move.w #18,10(a0)
  619.  move.w #80,d0
  620.  jsr FindCloseRoom
  621.  rts
  622.  
  623. .notdeadyet:
  624.  clr.b damagetaken(a0)
  625.  movem.l d0-d7/a0-a6,-(a7)
  626.  sub.l ObjectPoints,a1
  627.  add.l #ObjRotated,a1
  628.  move.l (a1),Noisex
  629.  move.w #200,Noisevol
  630.  move.w screamsound,Samplenum
  631.  move.b #1,chanpick
  632.  clr.b notifplaying
  633.  move.b 1(a0),IDNUM
  634.  st backbeat
  635.  jsr MakeSomeNoise
  636.  movem.l (a7)+,d0-d7/a0-a6
  637.  
  638. .noscream
  639.  
  640. ; tst.b canshootgun
  641. ; beq .cantshoot
  642.  cmp.w #20,FourthTimer(a0)
  643.  bge .cantshoot
  644.  
  645.   move.w #50,ThirdTimer(a0)
  646.  
  647.  move.w #17,10(a0)
  648.  
  649.  
  650.  move.w #20,Samplenum
  651.  move.b #0,SHOTTYPE
  652.  move.b #5,SHOTPOWER
  653.  move.w #16,SHOTSPEED
  654.  move.w #3,SHOTSHIFT
  655.  move.b ObjInTop(a0),SHOTINTOP
  656.  move.w #0,SHOTOFFMULT
  657.  move.w #-10,2(a0)
  658.  move.l #0,SHOTYOFF
  659.  jsr FireAtPlayer2
  660.  
  661. .cantshoot:
  662.  
  663.  
  664.  move.w TempFrames,d0
  665.  sub.w d0,SecTimer(a0)
  666.  bge.s .nohiss
  667.  
  668.  movem.l d0-d7/a0-a6,-(a7)
  669.  sub.l ObjectPoints,a1
  670.  add.l #ObjRotated,a1
  671.  move.l (a1),Noisex
  672.  move.w #100,Noisevol
  673.  move.w #16,Samplenum
  674.  move.b #1,chanpick
  675.  clr.b notifplaying
  676.  move.b 1(a0),IDNUM
  677.  st backbeat
  678.  jsr MakeSomeNoise
  679.  movem.l (a7)+,d0-d7/a0-a6
  680.  
  681.  Jsr GetRand
  682.  lsr.w #6,d0
  683.  and.w #255,d0
  684.  add.w #300,d0
  685.  move.w d0,SecTimer(a0)
  686.  
  687. .nohiss:
  688.  
  689.  move.b ObjInTop(a0),ViewerTop
  690.  move.b PLR1_StoodInTop,TargetTop
  691.  move.l PLR1_Roompt,ToRoom
  692.  move.l objroom,FromRoom
  693.  move.w newx,Viewerx
  694.  move.w newz,Viewerz
  695.  move.w PLR1_xoff,Targetx
  696.  move.w PLR1_zoff,Targetz
  697.  move.l PLR1_yoff,d0
  698.  asr.l #7,d0
  699.  move.w d0,Targety
  700.  move.w 4(a0),Viewery
  701.  jsr CanItBeSeen
  702.  
  703.  clr.b 17(a0)
  704.  tst.b CanSee
  705.  beq .carryonprowling
  706.  
  707.  move.b #1,17(a0)
  708.  
  709. .carryonprowling:
  710.  
  711.  cmp.b #'n',mors
  712.  beq.s .carryonprowling2
  713.  
  714.  
  715.  move.b ObjInTop(a0),ViewerTop
  716.  move.b PLR2_StoodInTop,TargetTop
  717.  move.l PLR2_Roompt,ToRoom
  718.  move.l objroom,FromRoom
  719.  move.w newx,Viewerx
  720.  move.w newz,Viewerz
  721.  move.w PLR2_xoff,Targetx
  722.  move.w PLR2_zoff,Targetz
  723.  move.l PLR2_yoff,d0
  724.  asr.l #7,d0
  725.  move.w d0,Targety
  726.  move.w 4(a0),Viewery
  727.  jsr CanItBeSeen
  728.  
  729.  tst.b CanSee
  730.  beq .carryonprowling2
  731.  
  732.  or.b #2,17(a0)
  733.  
  734. .carryonprowling2:
  735.  move.w #80,d0
  736.  jsr FindCloseRoom
  737.  
  738.  rts
  739.  
  740.  
  741. FlyingBallAttackPLR1:
  742.  
  743.  move.w TempFrames,d0
  744.  sub.w d0,FourthTimer(a0)
  745.  bgt.s .oktoshoot
  746.  move.w #50,ThirdTimer(a0)
  747. .oktoshoot:
  748.  
  749.  move.w 12(a0),d2
  750.  move.l ZoneAdds,a5
  751.  move.l (a5,d2.w*4),d0
  752.  add.l LEVELDATA,d0
  753.  move.l d0,objroom
  754.  
  755.  jsr ViewpointToDraw
  756.  
  757.  asl.l #2,d0
  758.  bne.s .nofacing
  759.  move.l #16,d0
  760.  bra .facing
  761. .nofacing:
  762.  
  763.  add.l alframe,d0
  764. .facing
  765.  add.l #$40000,d0
  766.  move.l d0,8(a0)
  767.  
  768.  move.w PLR1_xoff,newx
  769.  move.w PLR1_zoff,newz
  770.  move.w (a0),d1
  771.  move.l #ObjRotated,a6
  772.  move.l ObjectPoints,a1
  773.  lea (a1,d1.w*8),a1
  774.  lea (a6,d1.w*8),a6
  775.  move.w (a1),oldx
  776.  move.w 4(a1),oldz
  777.  move.w maxspd(a0),d2
  778.  muls.w TempFrames,d2
  779.  move.w d2,speed
  780.  move.w #120,Range
  781.  move.w 4(a0),d0
  782.  ext.l d0
  783.  asl.l #7,d0
  784.  sub.l #20*256,d0
  785.  move.l d0,newy
  786.  move.l d0,oldy
  787.  
  788.  move.b ObjInTop(a0),StoodInTop
  789.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  790.  clr.b canshove
  791.  clr.b GotThere
  792.  jsr HeadTowardsAng
  793.  move.w #%1000000000,wallflags
  794.  
  795.   
  796.  clr.b wallbounce
  797.  Jsr MoveObject
  798.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  799.  move.b StoodInTop,ObjInTop(a0)
  800.  
  801.  move.w AngRet,Facing(a0)
  802.  
  803.  move.l objroom,a2
  804.  move.w (a2),12(a0)
  805.  move.w oldx,(a1)
  806.  move.w oldz,4(a1)
  807.  
  808.  move.w (a2),d0
  809.  move.l #ZoneBrightTable,a5
  810.  move.l (a5,d0.w*4),d0
  811.  tst.b ObjInTop(a0)
  812.  bne.s .okbit
  813.  swap d0
  814. .okbit:
  815.  move.w d0,2(a0)
  816.  
  817.  move.l ToZoneFloor(a2),d0
  818.  move.l ToZoneRoof(a2),d1
  819.  tst.b ObjInTop(a0)
  820.  beq.s .notintop
  821.  move.l ToUpperFloor(a2),d0
  822.  move.l ToUpperRoof(a2),d1
  823. .notintop:
  824.  
  825.  move.w objyvel(a0),d2
  826.  add.w d2,4(a0)
  827.  
  828.  move.w 4(a0),d2
  829.  ext.l d2
  830.  asl.l #7,d2
  831.  move.l d2,d3
  832.  add.l #48*256,d2
  833.  sub.l #48*256,d3
  834.  
  835.  cmp.l d0,d2
  836.  blt.s .botnohit
  837.  move.l d0,d2
  838.  move.l d2,d3
  839.  neg.w objyvel(a0)
  840.  sub.l #96*256,d3
  841. .botnohit:
  842.  
  843.  cmp.l d1,d3
  844.  bgt.s .topnohit
  845.  move.l d1,d3
  846.  neg.w objyvel(a0)
  847. .topnohit:
  848.  
  849.  add.l #48*256,d3
  850.  asr.l #7,d3
  851.  move.w d3,4(a0)
  852.  
  853.  move.b damagetaken(a0),d2
  854.  beq .noscream
  855.  
  856.  sub.b d2,numlives(a0)
  857.  bgt .notdeadyet
  858.  
  859.  cmp.b #40,d2
  860.  ble.s .noexplode
  861.  
  862.  movem.l d0-d7/a0-a6,-(a7)
  863.  sub.l ObjectPoints,a1
  864.  add.l #ObjRotated,a1
  865.  move.l (a1),Noisex
  866.  move.w #400,Noisevol
  867.  move.w #14,Samplenum
  868.  move.b #1,chanpick
  869.  clr.b notifplaying
  870.  st backbeat
  871.  move.b 1(a0),IDNUM
  872.  jsr MakeSomeNoise
  873.  movem.l (a7)+,d0-d7/a0-a6
  874.  
  875.  movem.l d0-d7/a0-a6,-(a7)
  876.  move.w #0,d0
  877.  move.w #9,d2
  878.  move.w #31,d3
  879.  jsr ExplodeIntoBits
  880.  movem.l (a7)+,d0-d7/a0-a6
  881.  move.w #-1,12(a0)
  882.  rts
  883.  
  884. .noexplode:
  885.  
  886.  movem.l d0-d7/a0-a6,-(a7)
  887.  sub.l ObjectPoints,a1
  888.  add.l #ObjRotated,a1
  889.  move.l (a1),Noisex
  890.  move.w #200,Noisevol
  891.  move.w screamsound,Samplenum
  892.  move.b #1,chanpick
  893.  clr.b notifplaying
  894.  st backbeat
  895.  move.b 1(a0),IDNUM
  896.  jsr MakeSomeNoise
  897.  movem.l (a7)+,d0-d7/a0-a6
  898.  move.w #18,10(a0)
  899.  move.w #80,d0
  900.  jsr FindCloseRoom
  901.  rts
  902.  
  903. .notdeadyet:
  904.  clr.b damagetaken(a0)
  905.  movem.l d0-d7/a0-a6,-(a7)
  906.  sub.l ObjectPoints,a1
  907.  add.l #ObjRotated,a1
  908.  move.l (a1),Noisex
  909.  move.w #200,Noisevol
  910.  move.w screamsound,Samplenum
  911.  move.b #1,chanpick
  912.  clr.b notifplaying
  913.  move.b 1(a0),IDNUM
  914.  st backbeat
  915.  jsr MakeSomeNoise
  916.  movem.l (a7)+,d0-d7/a0-a6
  917.  
  918. .noscream
  919.  
  920. ; tst.b canshootgun
  921. ; beq .cantshoot
  922.  cmp.w #20,FourthTimer(a0)
  923.  bge .cantshoot
  924.  
  925.  move.w #50,ThirdTimer(a0)
  926.  
  927.  move.w #17,10(a0)
  928.  
  929.  
  930.  move.w #20,Samplenum
  931.  move.b #0,SHOTTYPE
  932.  move.b #5,SHOTPOWER
  933.  move.w #16,SHOTSPEED
  934.  move.w #3,SHOTSHIFT
  935.  move.b ObjInTop(a0),SHOTINTOP
  936.  move.w #0,SHOTOFFMULT
  937.  move.w #-10,2(a0)
  938.  move.l #0,SHOTYOFF
  939.  jsr FireAtPlayer1
  940.  
  941. .cantshoot:
  942.  
  943.  
  944.  move.w TempFrames,d0
  945.  sub.w d0,SecTimer(a0)
  946.  bge.s .nohiss
  947.  
  948.  movem.l d0-d7/a0-a6,-(a7)
  949.  sub.l ObjectPoints,a1
  950.  add.l #ObjRotated,a1
  951.  move.l (a1),Noisex
  952.  move.w #100,Noisevol
  953.  move.w #16,Samplenum
  954.  move.b #1,chanpick
  955.  clr.b notifplaying
  956.  move.b 1(a0),IDNUM
  957.  st backbeat
  958.  jsr MakeSomeNoise
  959.  movem.l (a7)+,d0-d7/a0-a6
  960.  
  961.  Jsr GetRand
  962.  lsr.w #6,d0
  963.  and.w #255,d0
  964.  add.w #300,d0
  965.  move.w d0,SecTimer(a0)
  966.  
  967. .nohiss:
  968.  
  969.  move.b ObjInTop(a0),ViewerTop
  970.  move.b PLR1_StoodInTop,TargetTop
  971.  move.l PLR1_Roompt,ToRoom
  972.  move.l objroom,FromRoom
  973.  move.w newx,Viewerx
  974.  move.w newz,Viewerz
  975.  move.w PLR1_xoff,Targetx
  976.  move.w PLR1_zoff,Targetz
  977.  move.l PLR1_yoff,d0
  978.  asr.l #7,d0
  979.  move.w d0,Targety
  980.  move.w 4(a0),Viewery
  981.  jsr CanItBeSeen
  982.  
  983.  clr.b 17(a0)
  984.  tst.b CanSee
  985.  beq .carryonprowling
  986.  
  987.  move.b #1,17(a0)
  988.  
  989. .carryonprowling:
  990.  
  991.  cmp.b #'n',mors
  992.  beq.s .carryonprowling2
  993.  
  994.  
  995.  move.b ObjInTop(a0),ViewerTop
  996.  move.b PLR2_StoodInTop,TargetTop
  997.  move.l PLR2_Roompt,ToRoom
  998.  move.l objroom,FromRoom
  999.  move.w newx,Viewerx
  1000.  move.w newz,Viewerz
  1001.  move.w PLR2_xoff,Targetx
  1002.  move.w PLR2_zoff,Targetz
  1003.  move.l PLR2_yoff,d0
  1004.  asr.l #7,d0
  1005.  move.w d0,Targety
  1006.  move.w 4(a0),Viewery
  1007.  jsr CanItBeSeen
  1008.  
  1009.  tst.b CanSee
  1010.  beq .carryonprowling2
  1011.  
  1012.  or.b #2,17(a0)
  1013.  
  1014. .carryonprowling2:
  1015.  move.w #80,d0
  1016.  jsr FindCloseRoom
  1017.  
  1018.  rts
  1019.